home *** CD-ROM | disk | FTP | other *** search
Wrap
import java.applet.AudioClip; import java.awt.Graphics; import java.io.DataInputStream; import java.util.Date; import java.util.NoSuchElementException; import java.util.Random; import java.util.StringTokenizer; class CVariableTable { public static final int V_COURSE_TITLE = 0; public static final int V_STUDENT_NAME = 1; public static final int V_STUDENT_ID = 2; public static final int V_NO_OF_QUESTIONS = 3; public static final int V_QUESTIONS_ANSWERED = 4; public static final int V_QUESTIONS_CORRECT = 5; public static final int V_QUESTIONS_WRONG = 6; public static final int V_QUESTIONS_REPEATED = 7; public static final int V_PERCENTAGE_CORRECT = 8; public static final int V_ACTUAL_TIME = 9; public static final int V_ACTUAL_DATE = 10; public static final int V_COURSE_TIME = 11; public static final int V_TASK_TAG = 12; public static final int V_ERROR_MESSAGE = 13; public static final int V_ERROR_NUMBER = 14; public static final int V_CLICK_X = 15; public static final int V_CLICK_Y = 16; public static final int V_RELEASE_X = 17; public static final int V_RELEASE_Y = 18; public static final int V_OBJECT_FROM_X = 19; public static final int V_OBJECT_FROM_Y = 20; public static final int V_OBJECT_TO_X = 21; public static final int V_OBJECT_TO_Y = 22; public static final int V_OBJECT_SCALE = 23; public static final int V_ICON_OBJECT = 24; public static final int V_CURRENT_TASK_TAG = 25; public static final int V_PREVIOUS_TASK_TAG = 26; public static final int V_CR = 27; public static final int V_QUESTION_TIME = 28; public static final int FN_LOWER_CASE = 0; public static final int FN_UPPER_CASE = 1; public static final int FN_STRING_LENGTH = 2; public static final int FN_SUB_STRING = 3; public static final int FN_STRIP_TRAILING = 4; public static final int FN_STRIP_LEADING = 5; public static final int FN_FIND = 6; public static final int FN_FIND_REVERSE = 7; public static final int FN_REPLACE = 8; public static final int FN_GET_ELEMENT = 9; public static final int FN_FIND_ELEMENT = 10; public static final int FN_DELETE_ELEMENT = 11; public static final int FN_REPLACE_ELEMENT = 12; public static final int FN_INSERT_ELEMENT = 13; public static final int FN_ELEMENT_COUNT = 14; public static final int FN_RANDOM = 15; public static final int FN_GET_CURRENT_TIME = 16; public static final int FN_GET_YEAR = 17; public static final int FN_GET_MONTH = 18; public static final int FN_GET_MONTH_NAME = 19; public static final int FN_GET_DAY = 20; public static final int FN_GET_DAY_NAME = 21; public static final int FN_GET_HOUR = 22; public static final int FN_GET_MINUTE = 23; public static final int FN_GET_SECOND = 24; public static final int FN_GOTO_TASK = 25; public static final int FN_IFTHEN = 26; public static final int FN_IFTHENELSE = 27; public static final int FN_PLAY_SOUND = 28; public static final int FN_ABS = 29; public static final int FN_INT = 30; public static final int FN_SQRT = 31; public static final int FN_MOD = 32; public static final int FN_ROUND_UP = 33; public static final int FN_ROUND_DN = 34; public static final int FN_COS = 35; public static final int FN_SIN = 36; public static final int FN_TAN = 37; public static final int FN_ACOS = 38; public static final int FN_ASIN = 39; public static final int FN_ATAN = 40; public static final int FN_EXP = 41; public static final int FN_LOG = 42; public static final int FN_GET_OBJECT_WIDTH = 43; public static final int FN_GET_OBJECT_HEIGHT = 44; public static final int FN_REDRAW_WINDOW = 45; public static final int FN_RELOAD_OBJECT = 46; public static final int EXP_OK = 0; public static final int EXP_EMPTY = 1; public static final int EXP_ERR_RELATION = 2; public static final int EXP_ERR_LOGICAL = 3; public static final int EXP_ERR_EXPECT_DATA = 4; public static final int EXP_ERR_EXPECT_ARITHMETIC = 5; public static final int ERR_INVALID_DATA = 6; public static final int ERR_EXPECT_EQUAL_OPERATOR = 7; public static final int EXP_ERR_EXPECT_OPEN_BRACKET = 8; public static final int EXP_ERR_EXPECT_CLOSE_BRACKET = 9; public static final int EXP_ERR_PARAM_EXPECTED = 10; public static final String[] strDefVariables = new String[]{"CourseTitle", "StudentName", "StudentID", "NoOfQuestions", "QuestionsAnswered", "QuestionsCorrect", "QuestionsWrong", "QuestionsRepeated", "PercentageCorrect", "ActualTime", "ActualDate", "CourseTime", "TaskTag", "ErrorMessage", "ErrorNumber", "ClickX", "ClickY", "ReleaseX", "ReleaseY", "ObjectFromX", "ObjectFromY", "ObjectToX", "ObjectToY", "DragScaleValue", "DraggedObjectName", "CurrentTaskTag", "PreviousTaskTag", "CR", "QuestionTime"}; public static final String[] strFunctions = new String[]{"LowerCase", "UpperCase", "StringLength", "SubString", "StripTrailing", "StripLeading", "Find", "ReverseFind", "Replace", "GetElement", "FindElement", "DeleteElement", "ReplaceElement", "InsertElement", "ElementCount", "Random", "GetCurrentDate", "GetYear", "GetMonth", "GetMonthName", "GetDay", "GetDayName", "GetHour", "GetMinutes", "GetSeconds", "GotoTask", "IfThen", "IfThenElse", "PlaySound", "Abs", "Int", "Sqrt", "Mod", "RoundUp", "RoundDown", "Cos", "Sin", "Tan", "Acos", "Asin", "Atan", "Exp", "Log", "GetObjectWidth", "GetObjectHeight", "RedrawWindow", "ReloadObject"}; public static final String[] strErrorCodes = new String[]{"Expression OK", "no data", "an invalid relational operator", "an invalid logical operator", "missing or invalid data", "an invalid arithmetic operator", "invalid data", "a missing '='", "a missing '('", "a missing ')'", "a missing or invalid function parameter"}; public static final String[] strRelational = new String[]{"<>", ">=", ">", "<=", "<", "="}; public static final String[] strArithmetic = new String[]{"+", "-", "*", "/", "^"}; public static final String[] strLogical = new String[]{"and", "or"}; CVariableList m_VariableList = new CVariableList(); CVariableList m_GlobalVariableList = new CVariableList(); boolean m_bLocalTable; String m_strBuffer = ""; int m_nCurrentIndex; int m_nErrorCode; boolean CheckExpression(String var1, boolean var2) { boolean var3 = false; boolean var4 = false; this.m_strBuffer = var1; this.m_nCurrentIndex = 0; if (this.GetNextChar() != 0) { var3 = this.CheckVariableGroup(var2); } if (this.m_nErrorCode != 0) { this.ReportError(); } return var3; } boolean LoadFromFile(DataInputStream var1) { short var2 = 0; FileLoad.ReadClass(var1); CVariable var4 = new CVariable(); var2 = FileLoad.ReadCPlusShort(var1); for(int var5 = 0; var5 < var2; ++var5) { var4.LoadFromFile(var1); if (var4.IsProtected() == 0) { CVariable var3 = new CVariable(); var3.Copy(var4); if (var3.IsGlobal() != 0) { this.m_GlobalVariableList.AddTail(var3); if (Globals.thePresView.m_VariableTable.FindVariable(var3) == null) { var3 = new CVariable(); var3.Copy(var4); Globals.thePresView.m_VariableTable.m_VariableList.AddTail(var3); } } else { this.m_VariableList.AddTail(var3); } } } return true; } void InitVariables() { this.m_VariableList.DeleteAll(); if (this.m_bLocalTable) { this.AddDefaultVariable(strDefVariables[0], 256); this.AddDefaultVariable(strDefVariables[3], 512); this.AddDefaultVariable(strDefVariables[5], 512); this.AddDefaultVariable(strDefVariables[6], 512); this.AddDefaultVariable(strDefVariables[4], 512); this.AddDefaultVariable(strDefVariables[7], 512); this.AddDefaultVariable(strDefVariables[28], 4096, false, (byte)0, (byte)1); this.AddDefaultVariable(strDefVariables[8], 512); this.AddDefaultVariable(strDefVariables[12], 1024); this.AddDefaultVariable(strDefVariables[25], 512); this.AddDefaultVariable(strDefVariables[26], 512); } else { this.AddDefaultVariable(strDefVariables[1], 256, true); this.AddDefaultVariable(strDefVariables[2], 256, true); this.AddDefaultVariable(strDefVariables[9], 2048, true, (byte)0, (byte)5); this.AddDefaultVariable(strDefVariables[10], 2048, true, (byte)0, (byte)3); this.AddDefaultVariable(strDefVariables[11], 2048, true, (byte)0, (byte)6); this.AddDefaultVariable(strDefVariables[13], 256, true); this.AddDefaultVariable(strDefVariables[14], 1024, true); this.AddDefaultVariable(strDefVariables[15], 1024, true); this.AddDefaultVariable(strDefVariables[16], 1024, true); this.AddDefaultVariable(strDefVariables[17], 1024, true); this.AddDefaultVariable(strDefVariables[18], 1024, true); this.AddDefaultVariable(strDefVariables[19], 1024, true); this.AddDefaultVariable(strDefVariables[20], 1024, true); this.AddDefaultVariable(strDefVariables[21], 1024, true); this.AddDefaultVariable(strDefVariables[22], 1024, true); this.AddDefaultVariable(strDefVariables[23], 512, true); this.AddDefaultVariable(strDefVariables[24], 256, true); this.AddDefaultVariable(strDefVariables[27], 256, true); } } void DeleteVariables() { this.m_VariableList.DeleteAll(); this.m_GlobalVariableList.DeleteAll(); } int FindElement(String var1, String var2, String var3) { int var4 = -1; var3 = var3.equals("") ? "\n\r" : var3; StringTokenizer var5 = new StringTokenizer(var1, var3); int var6 = var5.countTokens(); for(int var7 = 1; var4 == -1 && var7 <= var6; ++var7) { if (var5.nextToken().equals(var2)) { var4 = var7; } } return var4; } CVariable CalcFunction(int var1, boolean var2) { boolean var3 = false; CVariable var4 = new CVariable(); if (this.GetNextChar() != '(') { this.m_nErrorCode = 8; } else { ++this.m_nCurrentIndex; switch (var1) { case 0: case 1: case 2: case 4: case 5: case 15: case 29: case 30: case 31: case 33: case 34: case 35: case 36: case 37: case 38: case 39: case 40: case 41: case 42: case 43: case 44: case 46: var4 = this.ExecuteFunction(var1, 1, 0, var2); break; case 3: case 10: var4 = this.ExecuteFunction(var1, 2, 1, var2); break; case 6: case 7: case 32: var4 = this.ExecuteFunction(var1, 2, 0, var2); break; case 8: var4 = this.ExecuteFunction(var1, 3, 0, var2); break; case 9: case 11: var4 = this.ExecuteFunction(var1, 2, 2, var2); break; case 12: case 13: var4 = this.ExecuteFunction(var1, 3, 1, var2); break; case 14: case 28: var4 = this.ExecuteFunction(var1, 1, 1, var2); break; case 16: case 45: var4 = this.ExecuteFunction(var1, 0, 0, var2); break; case 17: case 18: case 19: case 20: case 21: case 22: case 23: case 24: var4 = this.ExecuteFunction(var1, 0, 1, var2); break; case 25: default: System.out.println("The requested function is not presently supported in the Java version, Function ID: " + var1); break; case 26: case 27: var4 = this.IfThenElse(var1, var2); } } return var4; } CVariable ExecuteFunction(int var1, int var2, int var3, boolean var4) { CVariable[] var5 = new CVariable[4]; int var6 = 0; char var7 = '\u0000'; int var8 = var2 + var3; if (var8 <= 4 && var8 > 0) { for(int var9 = 0; var9 < var8 && this.m_nErrorCode == 0; ++var9) { var7 = this.GetNextChar(); if ((var5[var9] = this.GetData(var4)) == null) { if (var2 != 0) { this.m_nErrorCode = 10; } } else { ++var6; } if (this.m_nErrorCode == 0) { var7 = this.GetNextChar(); if (var9 < var2 - 1) { if (var7 == ',') { ++this.m_nCurrentIndex; } else { this.m_nErrorCode = 10; } } else if (var7 == ',') { ++this.m_nCurrentIndex; } else { if (var7 == ')') { ++this.m_nCurrentIndex; break; } this.m_nErrorCode = 9; } } } } if (var4) { if (var5[0] == null) { var5[0] = new CVariable(); } var5[0].m_dValue = (double)0.0F; var5[0].SetType(512); System.out.println("Only validating, function will NOT be executed"); } else if (this.m_nErrorCode == 0) { switch (var1) { case 0: var5[0].m_strValue = var5[0].m_strValue.toLowerCase(); var5[0].SetType(256); break; case 1: var5[0].m_strValue = var5[0].m_strValue.toUpperCase(); var5[0].SetType(256); break; case 2: var5[0].m_dValue = (double)var5[0].m_strValue.length(); var5[0].SetType(512); break; case 3: if ((int)var5[1].m_dValue >= 0 && (int)var5[1].m_dValue < var5[0].m_strValue.length()) { if (var6 == 3) { int var17; if ((int)var5[2].m_dValue > 0) { var17 = (int)var5[1].m_dValue + (int)var5[2].m_dValue; } else { var17 = (int)var5[1].m_dValue + 1; } if (var17 <= var5[0].m_strValue.length()) { var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue, var17); } else { var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue); } } else { var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue); } } var5[0].SetType(256); break; case 4: while(var5[0].m_strValue.endsWith(" ")) { var5[0].m_strValue = var5[0].m_strValue.substring(0, var5[0].m_strValue.length() - 1); } var5[0].SetType(256); break; case 5: int var10; for(var10 = 0; this.SafeCharAt(var5[0].m_strValue, var10) == ' '; ++var10) { } if (var10 < var5[0].m_strValue.length()) { var5[0].m_strValue = var5[0].m_strValue.substring(var10); } else { var5[0].m_strValue = ""; } var5[0].SetType(256); break; case 6: var5[0].m_dValue = (double)var5[0].m_strValue.indexOf(var5[1].m_strValue) + (double)1.0F; var5[0].SetType(512); break; case 7: var5[0].m_dValue = (double)var5[0].m_strValue.lastIndexOf(var5[1].m_strValue) + (double)1.0F; var5[0].SetType(512); break; case 8: var5[0].m_strValue = Utils.InsertStringInString(var5[0].m_strValue, var5[1].m_strValue, var5[2].m_strValue); var5[0].SetType(256); break; case 9: if (var5[2] == null) { var5[2] = new CVariable(); var5[2] = var5[1]; } if (var5[3] == null) { var5[3] = new CVariable(); var5[3].SetType(256); } var5[0].m_strValue = this.GetElement(var5[0].m_strValue, (int)var5[1].m_dValue, (int)var5[2].m_dValue, var5[3].m_strValue); var5[0].SetType(256); break; case 10: if (var5[2] == null) { var5[2] = new CVariable(); var5[2].SetType(256); } var5[0].m_dValue = (double)this.FindElement(var5[0].m_strValue, var5[1].m_strValue, var5[2].m_strValue); var5[0].SetType(512); break; case 11: if (var5[2] == null) { var5[2] = new CVariable(); var5[2] = var5[1]; } if (var5[3] == null) { var5[3] = new CVariable(); var5[3].SetType(256); } var5[0].m_strValue = this.DeleteElement(var5[0].m_strValue, (int)var5[1].m_dValue, (int)var5[2].m_dValue, var5[3].m_strValue); var5[0].SetType(256); break; case 12: if (var5[3] == null) { var5[3] = new CVariable(); var5[3].SetType(256); } var5[0].m_strValue = this.ReplaceElement(var5[0].m_strValue, (int)var5[1].m_dValue, var5[2].m_strValue, var5[3].m_strValue); var5[0].SetType(256); break; case 13: if (var5[3] == null) { var5[3] = new CVariable(); var5[3].SetType(256); } var5[0].m_strValue = this.InsertElement(var5[0].m_strValue, (int)var5[1].m_dValue, var5[2].m_strValue, var5[3].m_strValue); var5[0].SetType(256); break; case 14: if (var5[1] == null) { var5[1] = new CVariable(); var5[1].SetType(256); } var5[0].m_dValue = (double)this.ElementCount(var5[0].m_strValue, var5[1].m_strValue); var5[0].SetType(512); break; case 15: Random var16 = new Random(); var5[0].m_dValue *= var16.nextDouble(); var5[0].SetType(512); break; case 16: var5[0].m_dateValue = new Date(); var5[0].SetType(2048); break; case 17: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)(var5[0].m_dateValue.getYear() + 1900); var5[0].SetType(512); break; case 18: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)(var5[0].m_dateValue.getMonth() + 1); var5[0].SetType(512); break; case 19: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_strValue = var5[0].GetDateValue(var5[0].m_dateValue, 3); var5[0].SetType(256); break; case 20: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)var5[0].m_dateValue.getDate(); var5[0].SetType(512); break; case 21: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_strValue = var5[0].GetDateValue(var5[0].m_dateValue, 0); var5[0].SetType(256); break; case 22: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)var5[0].m_dateValue.getHours(); var5[0].SetType(512); break; case 23: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)var5[0].m_dateValue.getMinutes(); var5[0].SetType(512); break; case 24: if (var5[0] == null) { var5[0] = new CVariable(); } if (var5[0].m_dateValue == null) { var5[0].m_dateValue = new Date(); } var5[0].m_dValue = (double)var5[0].m_dateValue.getSeconds(); var5[0].SetType(512); case 25: break; case 26: case 27: default: var5[0].SetType(512); break; case 28: AudioClip var11 = Globals.thePresView.getAudioClip(Globals.thePresView.getCodeBase(), var5[0].m_strValue); var11.play(); break; case 29: var5[0].m_dValue = Math.abs(var5[0].m_dValue); var5[0].SetType(512); break; case 30: var5[0].m_dValue = (double)((int)var5[0].m_dValue); var5[0].SetType(512); break; case 31: var5[0].m_dValue = Math.sqrt(Math.abs(var5[0].m_dValue)); var5[0].SetType(512); break; case 32: var5[0].m_dValue %= var5[1].m_dValue; var5[0].SetType(512); break; case 33: var5[0].m_dValue = Math.ceil(var5[0].m_dValue); var5[0].SetType(512); break; case 34: var5[0].m_dValue = Math.floor(var5[0].m_dValue); var5[0].SetType(512); break; case 35: var5[0].m_dValue = Math.cos(var5[0].m_dValue); var5[0].SetType(512); break; case 36: var5[0].m_dValue = Math.sin(var5[0].m_dValue); var5[0].SetType(512); break; case 37: var5[0].m_dValue = Math.tan(var5[0].m_dValue); var5[0].SetType(512); break; case 38: var5[0].m_dValue = Math.acos(var5[0].m_dValue); var5[0].SetType(512); break; case 39: var5[0].m_dValue = Math.asin(var5[0].m_dValue); var5[0].SetType(512); break; case 40: var5[0].m_dValue = Math.atan(var5[0].m_dValue); var5[0].SetType(512); break; case 41: var5[0].m_dValue = Math.exp(var5[0].m_dValue); var5[0].SetType(512); break; case 42: if (var5[0].m_dValue > (double)0.0F) { var5[0].m_dValue = Math.log(var5[0].m_dValue); } var5[0].SetType(512); break; case 43: CDrawObj var19 = Globals.thePresView.FindDrawObject(var5[0].m_strValue); if (var19 != null) { var5[0].m_dValue = (double)var19.GetActualRect().width; } var5[0].SetType(512); break; case 44: CDrawObj var18 = Globals.thePresView.FindDrawObject(var5[0].m_strValue); if (var18 != null) { var5[0].m_dValue = (double)var18.GetActualRect().height; } var5[0].SetType(512); break; case 45: Globals.thePresView.Render((CRect)null); Globals.thePresView.Draw((Graphics)null, (CRect)null); break; case 46: CIconObject var12 = null; CDrawObj var13 = Globals.thePresView.FindDrawObject(var5[0].m_strValue); if (var13 != null) { var12 = var13.GetIconObject(); } if (var12 != null) { var12.DoAction(); var12.SetResponse(); Globals.thePresView.InvalObj(var13); Globals.thePresView.RenderAndDrawDirtyList(); } var5[0].m_dValue = (double)0.0F; var5[0].SetType(512); } } else { this.ReportError(); if (var5[0] == null) { var5[0] = new CVariable(); } var5[0].m_dValue = (double)0.0F; var5[0].SetType(512); } return var5[0]; } String GetElement(String var1, int var2, int var3, String var4) { String var5 = ""; var4 = var4.equals("") ? "\n\r" : var4; StringTokenizer var6 = new StringTokenizer(var1, var4); int var7 = var6.countTokens(); if (var7 >= var2 && var2 > 0) { int var8; for(var8 = 1; var8 < var2; ++var8) { var6.nextToken(); } if (var3 != 0 && var3 > var2 && var7 >= var3) { while(var8 <= var3) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; ++var8; } } else { var5 = var5 + var6.nextToken(); } } return var5; } String ReplaceElement(String var1, int var2, String var3, String var4) { String var5 = ""; var4 = var4.equals("") ? "\n\r" : var4; StringTokenizer var6 = new StringTokenizer(var1, var4); int var7 = var6.countTokens(); if (var2 <= var7 && var2 > 0) { int var8; for(var8 = 1; var8 < var2; ++var8) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; } var5 = var5 + var3; var5 = var5 + var4; var6.nextToken(); ++var8; while(var8 <= var7) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; ++var8; } } return var5; } int ElementCount(String var1, String var2) { var2 = var2.equals("") ? "\n\r" : var2; StringTokenizer var3 = new StringTokenizer(var1, var2); return var3.countTokens(); } CVariable FindVariable(String var1) { CVariable var2 = null; boolean var3 = false; try { var2 = this.m_VariableList.GetHead(); } catch (NoSuchElementException var5) { var3 = true; } while(!var3) { if (var2 != null && var2.m_strName.equals(var1)) { return var2; } try { var2 = this.m_VariableList.GetNext(); } catch (NoSuchElementException var4) { var3 = true; } } return null; } CVariable FindVariable(CVariable var1) { CVariable var2 = null; boolean var3 = false; try { var2 = this.m_VariableList.GetHead(); } catch (NoSuchElementException var5) { var3 = true; } while(!var3) { if (var2 != null && var2.GetID() == var1.GetID()) { return var2; } try { var2 = this.m_VariableList.GetNext(); } catch (NoSuchElementException var4) { var3 = true; } } return null; } CVariable FindVariable(int var1) { CVariable var2 = null; boolean var3 = false; try { var2 = this.m_VariableList.GetHead(); } catch (NoSuchElementException var5) { var3 = true; } while(!var3) { if (var2 != null && var2.GetID() == var1) { return var2; } try { var2 = this.m_VariableList.GetNext(); } catch (NoSuchElementException var4) { var3 = true; } } return null; } void SetDefaultVariables() { if (this.m_bLocalTable) { CVariable var1 = Utils.SearchAllVariables(strDefVariables[0]); if (var1 != null && Globals.CUR_COURSE != null) { var1.SetValue(Globals.CUR_COURSE.m_IconObject.GetText()); return; } } else { CVariable var2 = Utils.SearchAllVariables(strDefVariables[27]); if (var2 != null) { var2.SetValue("\r\n"); } } } int SetVariables(String var1, boolean var2) { this.m_nErrorCode = 0; for(int var3 = 0; (this.m_strBuffer = Utils.GetLine(var1, var3)) != null && this.m_nErrorCode == 0; ++var3) { this.m_nCurrentIndex = 0; if (this.m_strBuffer.length() > 0 && this.SafeCharAt() != ';') { this.ParseExpression(false, var2); } } if (this.m_nErrorCode != 0) { this.ReportError(); } return this.m_nErrorCode; } CVariable IfThenElse(int var1, boolean var2) { CVariable var3 = new CVariable(); boolean var4 = false; char var5 = '\u0000'; byte var6 = 0; var3.SetType(512); if (var1 == 27) { var6 = 5; } else { var6 = 3; } for(int var7 = 0; var7 < var6 && this.m_nErrorCode == 0; ++var7) { var5 = this.GetNextChar(); switch (var7) { case 0: if (var5 == 0) { this.m_nErrorCode = 10; } else { var4 = this.CheckVariableGroup(false); } break; case 1: case 3: if (var5 != 0 && var5 == ',') { ++this.m_nCurrentIndex; } else { this.m_nErrorCode = 10; } break; case 2: if (var5 == 0) { this.m_nErrorCode = 10; } else if (var4) { var3 = this.CalcVariableGroup(var2); } else { this.CalcVariableGroup(var2); } break; case 4: if (var5 == 0) { this.m_nErrorCode = 10; } else if (var4) { this.CalcVariableGroup(var2); } else { var3 = this.CalcVariableGroup(var2); } } } if (this.m_nErrorCode != 0) { this.ReportError(); } return var3; } void ResetVariables() { CVariable var1 = null; boolean var2 = false; try { var1 = this.m_VariableList.GetHead(); } catch (NoSuchElementException var4) { var2 = true; } while(!var2) { if (var1 != null) { var1.Reset(); } try { var1 = this.m_VariableList.GetNext(); } catch (NoSuchElementException var3) { var2 = true; } } } void AddDefaultVariable(String var1, int var2, boolean var3) { this.AddDefaultVariable(var1, var2, var3, (byte)0, (byte)0); } void AddDefaultVariable(String var1, int var2, boolean var3, byte var4) { this.AddDefaultVariable(var1, var2, var3, var4, (byte)0); } void AddDefaultVariable(String var1, int var2, boolean var3, byte var4, byte var5) { CVariable var6 = new CVariable(); var6.SetName(var1); var6.m_cDecPlaces = var4; var6.m_cFormat = var5; var6.m_nFlags = 0; var6.m_nFlags |= 1; var6.m_nFlags |= var2; if (var3) { var6.m_nFlags |= 2; } this.m_VariableList.AddTail(var6); } void AddDefaultVariable(String var1, int var2) { this.AddDefaultVariable(var1, var2, false, (byte)0, (byte)0); } CVariable GetData(boolean var1) { boolean var2 = false; boolean var3 = false; char var4 = '\u0000'; String var5 = new String(); CVariable var6 = new CVariable(); this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex); while((var4 = this.SafeCharAt()) != 0 && !var3 && this.m_nErrorCode == 0) { if (var2) { switch (var4) { case '"': ++this.m_nCurrentIndex; if (this.SafeCharAt() == '"') { var5 = var5 + "\""; ++this.m_nCurrentIndex; } else { var2 = false; var3 = true; } break; default: var5 = var5 + String.valueOf(var4); ++this.m_nCurrentIndex; } } else { switch (var4) { case ' ': case '(': case ')': case '*': case '+': case ',': case '/': case '<': case '=': case '>': case '^': var3 = true; break; case '"': if (var5.length() == 0) { var6.SetType(256); ++this.m_nCurrentIndex; var2 = true; } else { var5 = var5 + "\""; ++this.m_nCurrentIndex; } break; case '-': if (var5.length() == 0) { var6.SetType(512); var5 = var5 + "-"; ++this.m_nCurrentIndex; } else { var3 = true; } break; case ':': var6.SetType(4096); var5 = var5 + ":"; ++this.m_nCurrentIndex; break; default: if (Character.isDigit(var4) && var5.length() == 0) { var6.SetType(512); } var5 = var5 + String.valueOf(var4); ++this.m_nCurrentIndex; } } } if (!var3) { } switch (var6.GetType()) { case 256: var6.SetValue(var5); break; case 512: try { var6.SetValue(Double.valueOf(var5)); } catch (NumberFormatException var9) { var6.SetValue((double)0.0F); } case 2048: case 4096: break; default: CVariable var7 = Utils.SearchAllVariables(var5); if (var7 != null) { var6.Copy(var7); } else { int var8 = -1; if ((var8 = this.Translate(strFunctions, var5)) != -1) { var6 = this.CalcFunction(var8, var1); } else { var6 = null; if (!var5.equals("")) { this.m_nErrorCode = 6; } } } } return var6; } boolean CheckVariableGroup(boolean var1) { boolean var2 = false; boolean var3 = false; boolean var4 = true; boolean var5 = false; char var6 = '\u0000'; int var7 = -1; var6 = this.GetNextChar(); while(var6 != 0 && var6 != ',' && this.m_nErrorCode == 0 && !var5) { if (var6 == ')') { ++this.m_nCurrentIndex; var5 = true; } else { if (var4) { if (var6 == '(') { ++this.m_nCurrentIndex; var3 = this.CheckVariableGroup(var1); } else { var3 = this.GetRelation(var1); } if (this.m_nErrorCode == 0) { switch (var7) { case -1: var2 = var3; break; case 0: if (var2 && var3) { var2 = true; } else { var2 = false; } break; case 1: if (!var2 && !var3) { var2 = false; } else { var2 = true; } } } } else { String var8 = this.GetToken().toLowerCase(); if ((var7 = this.Translate(strLogical, var8)) == -1) { this.m_nErrorCode = 3; } } var4 = !var4; var6 = this.GetNextChar(); } } return var2; } int Translate(String[] var1, String var2) { String var3 = new String(); int var4 = -1; do { ++var4; try { var3 = var1[var4]; } catch (ArrayIndexOutOfBoundsException var5) { var4 = -1; } } while(!var3.equals(var2) && var4 != -1); return var4; } void SetError(int var1, String var2) { CVariable var3 = Utils.SearchAllVariables(strDefVariables[14]); if (var3 != null) { var3.SetValue(var1); } var3 = Utils.SearchAllVariables(strDefVariables[13]); if (var3 != null) { if (var2 != null) { var3.SetValue(var2); return; } var3.SetValue(""); } } char GetNextChar() { this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex); return this.SafeCharAt(); } void DeleteTemporaryVariables() { CVariable var1 = null; boolean var2 = false; try { var1 = this.m_VariableList.GetHead(); } catch (NoSuchElementException var4) { var2 = true; } while(!var2) { if (var1 != null && (var1.GetFlags() & 4) != 0) { this.m_VariableList.Delete(var1); } try { var1 = this.m_VariableList.GetNext(); } catch (NoSuchElementException var3) { var2 = true; } } } char SafeCharAt() { return this.SafeCharAt(this.m_strBuffer, this.m_nCurrentIndex); } char SafeCharAt(String var1, int var2) { char var3 = 0; if (var1 != null && var2 < var1.length()) { var3 = var1.charAt(var2); } return var3; } String GetToken() { String var2 = ""; for(char var1 = this.GetNextChar(); var1 != ' ' && var1 != ')' && var1 != '(' && var1 != '=' && var1 != '+' && var1 != '-' && var1 != '*' && var1 != '/' && var1 != ',' && var1 != 0; var1 = this.SafeCharAt()) { var2 = var2 + String.valueOf(var1); ++this.m_nCurrentIndex; } return var2; } String GetOperator() { String var1 = ""; for(char var2 = this.GetNextChar(); var2 == '<' || var2 == '=' || var2 == '>'; var2 = this.SafeCharAt()) { var1 = var1 + String.valueOf(var2); ++this.m_nCurrentIndex; } return var1; } boolean GetRelation(boolean var1) { boolean var2 = false; new CVariable(); new CVariable(); int var5 = -1; CVariable var3; if ((var3 = this.GetData(var1)) == null) { this.m_nErrorCode = 4; } else { if (var3.GetType() == 1024) { var3.m_dValue = (double)var3.m_lValue; var3.SetType(512); } if ((var5 = this.Translate(strRelational, this.GetOperator())) == -1) { this.m_nErrorCode = 2; } else { CVariable var4; if ((var4 = this.GetData(var1)) == null) { this.m_nErrorCode = 4; } else { if (var4.GetType() == 1024) { var4.m_dValue = (double)var4.m_lValue; var4.SetType(512); } switch (var5) { case 0: var2 = var3.NotEqual(var4); break; case 1: var2 = var3.MoreOrEqual(var4); break; case 2: var2 = var3.IsMoreThan(var4); break; case 3: var2 = var3.LessOrEqual(var4); break; case 4: var2 = var3.IsLessThan(var4); break; case 5: var2 = var3.Equals(var4); } } } } return var2; } CVariable CalcVariableGroup(boolean var1) { int var2 = -1; boolean var3 = true; boolean var4 = false; CVariable var5 = new CVariable(); new CVariable(); char var7; if ((var7 = this.GetNextChar()) == 0) { this.m_nErrorCode = 4; } while(var7 != 0 && var7 != ',' && this.m_nErrorCode == 0 && !var4) { if (var7 == ')') { ++this.m_nCurrentIndex; var4 = true; } else { if (var3) { CVariable var6; if (var7 == '(') { ++this.m_nCurrentIndex; var6 = this.CalcVariableGroup(var1); } else { var6 = this.GetData(var1); } if (var6 != null && this.m_nErrorCode == 0) { switch (var2) { case -1: var5.Copy(var6); break; case 0: var5 = var5.Plus(var6); break; case 1: var5 = var5.Minus(var6); break; case 2: var5 = var5.MultipliedBy(var6); break; case 3: var5 = var5.DividedBy(var6); break; case 4: var5 = var5.PowerOf(var6); } } } else if ((var2 = this.Translate(strArithmetic, String.valueOf(var7))) == -1) { this.m_nErrorCode = 5; } else { ++this.m_nCurrentIndex; } var3 = !var3; var7 = this.GetNextChar(); } } return var5; } String DeleteElement(String var1, int var2, int var3, String var4) { String var5 = ""; var4 = var4.equals("") ? "\n\r" : var4; StringTokenizer var6 = new StringTokenizer(var1, var4); int var7 = var6.countTokens(); if (var7 >= var2 && var2 > 0) { int var8; for(var8 = 1; var8 < var2; ++var8) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; } if (var3 != 0 && var3 > var2 && var7 >= var3) { while(var8 <= var3) { var6.nextToken(); ++var8; } } else { var6.nextToken(); ++var8; } while(var8 <= var7) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; ++var8; } } return var5; } String InsertElement(String var1, int var2, String var3, String var4) { String var5 = ""; var4 = var4.equals("") ? "\n\r" : var4; StringTokenizer var6 = new StringTokenizer(var1, var4); int var7 = var6.countTokens(); if (var2 <= var7 && var2 > 0) { int var8; for(var8 = 1; var8 < var2; ++var8) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; } var5 = var5 + var3; for(var5 = var5 + var4; var8 <= var7; ++var8) { var5 = var5 + var6.nextToken(); var5 = var5 + var4; } } return var5; } void ReportError() { System.out.println("The expression '" + this.m_strBuffer + "' cannot be evaluated due to " + strErrorCodes[this.m_nErrorCode]); } CVariableTable(boolean var1) { this.m_bLocalTable = var1; this.InitVariables(); } CVariable ParseExpression(boolean var1, boolean var2) { CVariable var3 = new CVariable(); Object var4 = null; String var5 = ""; int var6 = -1; if ((var5 = this.GetToken()) == "") { this.m_nErrorCode = 1; } else { if ((var3 = Utils.SearchAllVariables(var5)) == null || var1) { var3 = new CVariable(); var3.SetName(var5); var3.m_nFlags = 4; this.m_VariableList.AddTail(var3); } if ((var6 = this.Translate(strFunctions, var5)) != -1) { var3 = this.CalcFunction(var6, var2); } else { this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex); if (this.SafeCharAt() != '=') { this.m_nErrorCode = 7; } else { ++this.m_nCurrentIndex; CVariable var11 = this.CalcVariableGroup(var2); if (this.m_nErrorCode == 0) { if (var3.GetType() == 0) { var3.SetType(var11.GetType()); } label56: switch (var3.GetType()) { case 256: switch (var11.GetType()) { case 512: String var15 = var11.GetNumericValueAsString(); var3.SetValue(var15); break label56; case 1024: var3.SetValue(String.valueOf(var11.GetIntegerValue())); break label56; default: var3.SetValue(var11.GetStringValue()); break label56; } case 512: switch (var11.GetType()) { case 256: double var14; try { var14 = Double.valueOf(var11.GetStringValue()); } catch (NumberFormatException var9) { var14 = (double)0.0F; } var3.SetValue(var14); break label56; case 1024: var3.SetValue((double)var11.GetIntegerValue()); break label56; default: var3.SetValue(var11.GetNumericValue()); break label56; } case 1024: switch (var11.GetType()) { case 256: long var7; try { var7 = Long.parseLong(var11.GetStringValue()); } catch (NumberFormatException var10) { var7 = 0L; } var3.SetValue(var7); break label56; case 512: var3.SetValue((long)var11.GetNumericValue()); break label56; default: var3.SetValue(var11.GetIntegerValue()); break label56; } case 2048: var3.m_dateValue = var11.m_dateValue; break; case 4096: var3.m_timeSpanValue = var11.m_timeSpanValue; } if (!var2 && Globals.CUR_COURSE != null && var3.GetNumericValue() == (double)0.0F && (var3.GetName().equals(strDefVariables[5]) || var3.GetName().equals(strDefVariables[6]) || var3.GetName().equals(strDefVariables[4]) || var3.GetName().equals(strDefVariables[7]))) { Globals.CUR_COURSE.ResetHistory(); } } } } } this.DeleteTemporaryVariables(); return var3; } }